
/**
 房间运营状态
 *
*/

import { ATeamCombat } from "GameLoop/WorldState/EntityManager/Entitys";
import { State } from "framework/FSM/AState";
import { TeamUtils } from "utils/team/TeamUtils";
 
/**
 * 集合
*/
export class State_Assemble<T extends IStateArg<ATeamCombat,ITaskDeclare["team"]>> extends State<T>  
{
    public getExitActions(arg: T): Action[] {
        arg.entity._AssemblePos = undefined;
        return []
    }
    public getActions(arg:T):Action[]
    {  
        /**
         * 集合之前要进行boost 检测
        */
        


        // 会被其他的小队成员堵住,集结寻路之后有爬堵在了路上
        // 一字长蛇阵移动
        // 集合
        // 小队集合
        /**
         * 1.在出生的房间，在ram附近集合
         * 2.不在自己的房间 在当前位置集合
        */
        if(!arg.entity._AssemblePos)
        {
            if(arg.entity.roomName == arg.entity.room.name)
            {
                
                const room = arg.entity.room;
                const pos = room.findAssemble(arg.entity.GUID(),arg.entity.roomName,arg.entity.moveTarget()?.pos.roomName as string);
                if(pos)
                {
                    arg.entity._AssemblePos = arg.entity.findAssemble(pos)[0] ;
                }
                
            }
            else
            {
                const poss = arg.entity.findAssemble(arg.entity.getAnchor());
                arg.entity._AssemblePos = poss[0];
            }
        }
        if(arg.entity._AssemblePos)
        {
            arg.entity.moveAssemble(arg.entity._AssemblePos);
        }
        else
        {
            arg.entity.log("error","集合状态下找不到集合点")
        }
        return []
    }
}
